<?php

require_once 'classes/Cause.php';
require_once 'SCinterface.php';
require_once 'classes/Message.php';

/*
 * Classe de service CRUD pour manipuler les enregistrements des Causes
 */
class SCcause implements SCinterface{
    
    private $db;

    /**
     *Contructeur créant l'objet pour la connexion à la DB 
     */
    public function __construct() {
        $this->db = new PDO(ACA_DB_DSN, ACA_DB_USER, ACA_DB_PASS, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES \'UTF8\''));
        $this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    }

    /**
    * Ajoute une Cause
    * @param Cause Cause à ajouter
    */
   public function ajouter($uneCauseAAjouter) {
       try{
           
           $query =  $this->db->prepare("INSERT INTO cause (nom, typeDeCause_nom) VALUES(:nom, :typeDeCause_nom);");

           $query->execute(array(
                   'nom'              => $uneCauseAAjouter->getNom(),
                   'typeDeCause_nom'  => $uneCauseAAjouter->getTypeDeCause_nom()
               ));
           
               $this->db->query($query->queryString);
               $query->closeCursor();
             
       }
       catch(PDOException $e)
        {
           return new Message("Cause non ajoutée:".$e->getMessage());
        }
        
               return $uneCauseAAjouter;
   }
    /**
     * Methode permettant de modifier une Cause
     * @param Cause Cause à modifier
     * @return boolean 
     */
    public function modifier($uneCauseAModifier){
        try{
                 
           $query =  $this->db->prepare("UPDATE cause SET nom=:nom, typeDeCause_nom=:typeDeCause_nom
               WHERE nom = '".$uneCauseAModifier->getNom()."';");

           $query->execute(array(
                   'nom'              => $uneCauseAModifier->getNom(),
                   'typeDeCause_nom'  => $uneCauseAModifier->getTypeDeCause_nom()
               ));
           $query->closeCursor();
        
           
           }
                catch(PDOException $e)
        {
            print($e->getMessage());
            return new Message("Cause non modifiée");
        }
               return $uneCauseAModifier;
    }
    /**
     * Methode permettant de supprimer une Cause
     * @param Cause Cause à supprimer
     * @return boolean 
     */
    public function supprimer($uneCauseASupprimer){
        try{
        $query = "DELETE FROM cause WHERE nom='".$uneCauseASupprimer."';";
                   
                $this->db->query($query);
                $message = new Message("Cause supprimée");
          
                }
                catch(PDOException $e)
        {
            $message = new Message("Cause non supprimée:".$e->getMessage());
        }
               return $message;
    }
   
    /**
     *
     * @param Cause CauseALister de recherche sous forme d'objet Cause
     * @return un tableau d'objet Cause
     */
    public function lister($CauseALister){
        try{
         

            $sql="SELECT * FROM cause ";
            $sql_Where="WHERE";
            if($CauseALister!=NULL)
            {
                if($CauseALister->getNom()!=NULL)
                    $sql_Where .= " nom = '".$CauseALister->getNom()."' AND ";
                if($CauseALister->getTypeDeCause_nom()!=NULL)
                    $sql_Where .= " typeDeCause_nom = '".$CauseALister->getTypeDeCause_nom()."' AND ";

            }         
            
            
            $sql_Where = substr($sql_Where,0,-5);
            $sql.=$sql_Where." order by nom;";
            $lesCausesTrouvees=NULL;
            $uneCauseLue=NULL;
            $result = $this->db->query($sql);
            while($row = $result->fetch())
            {   
                $uneCauseLue = new Cause($row['nom'],$row['typeDeCause_nom']);
               
                    $lesCausesTrouvees[]=$uneCauseLue;
            }                
        }
        catch(PDOException $e)
        {
            print($e->getMessage());
            $lesCausesTrouvees=NULL;
        }
        return $lesCausesTrouvees;
    }

  
}

?>
